/**
 * 自己动手写操作系统
 *
 * 系统引导部分，启动时由硬件加载运行，然后完成对二级引导程序loader的加载
 * 该部分程序存储于磁盘的第1个扇区，在计算机启动时将会由BIOS加载到0x7c00处
 * 之后，将由BIOS跳转至0x7c00处开始运行
 * 
 * 作者：李述铜
 * 联系邮箱: 527676163@qq.com
 */
	#include "boot.h"

  	// 16位代码，务必加上
  	.code16
 	.text
	.global _start
	.extern boot_entry
	// _start在0x7c00处，引导代码也在0x7c00到后一个扇区（BIOS 加载程序到内存时，通常是从低地址往高地址加载），0x7c00往小了走是栈，8086中栈是高地址往低地址
_start:
	mov $0 ,%ax
	mov %ax, %ds
	mov %ax, %ss
	mov %ax, %es
	mov %ax, %fs
	mov %ax, %gs

	mov $_start,%esp


    //传参0xe给ah告知是INT10的显示字符功能
	mov $0xe, %ah
	//显示的字符放进al
	mov $'B', %al
	int $0x10

//加载loader突破512字节限制，干事
read_loader:
//放到内存0x8000位置，es:bx决定，es=0
	mov $0x8000,%bx
	mov $0x2,%ah
//bios认为扇区从1开始
	mov $0x2,%cx
	//磁头柱面从0开始，没跨柱面
	//dx=dh+dl
	mov $0x0080,%dx
	//扇区数64-32kb
	mov $64,%al
	int $0x13
	jc read_loader


	//跳转到C执行->有返回call,无返回，直接在C做：jmp
	jmp boot_entry
	jmp .
	
	// 引导结束段
	.section boot_end, "ax"
boot_sig: .byte 0x55, 0xaa
